package sv.ues.fia.activities;

import sv.ues.fia.R;
import sv.ues.fia.bdcontrol.ControlBDHelper;
import sv.ues.fia.entity.Integrante;
import sv.ues.fia.fragmentcontrol.MyFragmentPagerAdapter;
import sv.ues.fia.fragmentcontrol.IntegranteFragment;
import sv.ues.fia.session.UsuarioActual;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Toast;
import android.widget.AdapterView.AdapterContextMenuInfo;

public class IntegranteActivity extends FragmentActivity {
	/** Definir todos los objetos EN EL FRAGMENT **/
	IntegranteFragment fragmentPageOne;
	IntegranteFragment fragmentPageTwo;
	ControlBDHelper bdHelper;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tab_pager);

		bdHelper = new ControlBDHelper(this);

		ViewPager pager = (ViewPager) findViewById(R.id.pager);

		FragmentManager fMananger = getSupportFragmentManager();

		/** Se crean dos instancias del mismo Fragment una por cada pagina **/
		fragmentPageOne = new IntegranteFragment();
		fragmentPageTwo = new IntegranteFragment();
		/** Obtener los titulos de pagina del Res->String para manejar idiomas **/
		String titlePageOne = getResources().getString(R.string.page_insert);
		String titlePageTwo = getResources().getString(R.string.page_search);

		MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(
				fMananger, fragmentPageOne, fragmentPageTwo, titlePageOne,
				titlePageTwo);

		pager.setAdapter(pagerAdapter);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.general_options, menu);
		return true;

	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo info) {
		super.onCreateContextMenu(menu, v, info);

		MenuInflater inflater = this.getMenuInflater();
		inflater.inflate(R.menu.contextual_options, menu);

	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {

		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
				.getMenuInfo();
		final int position = info.position;

		switch (item.getItemId()) {

		/** AQUI SE EJECUTAN LAS ACCINES PARA IR A LA INTERFAZ DE MODIFICAR **/
		case R.id.action_menu_update:

			Intent intent = new Intent();
			intent.setClass(this, IntegranteUpdateActivity.class);
			startActivity(intent);

			/**
			 * Obtener Objeto Perfil seleccionado para recuperarlo en
			 * UpdateActivity
			 **/
			UsuarioActual.setOBJECT(fragmentPageTwo.listResultIntegrante
					.get(info.position));

			/**
			 * Se borran las listas usadas para mostrar los resultados de la
			 * busqueda
			 **/
			fragmentPageTwo.listItemsResult.clear();
			fragmentPageTwo.adapter.notifyDataSetChanged();
			return true;

			/**
			 * AQUI SE EJECUTAN LAS ACCINES BORRAR UN REGISTRO, SE MUESTRA UN
			 * DIALOG DE CONFIRMACION
			 **/
		case R.id.action_menu_delete:

			// Dialog de confirmacion de eliminaci�n de registro
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
			builder.setMessage(this.getString(R.string.deleteConfirm))
					.setCancelable(false)
					.setPositiveButton(android.R.string.ok,
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int id) {
									// Mas abajo se OVERRIDE la accion del SI
								}
							})
					.setNegativeButton(android.R.string.cancel,
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int id) {
									dialog.cancel(); // Cerra dialog y cancelar
														// eliminacion
								}
							});

			final AlertDialog alert = builder.create();
			alert.show();

			// Al darle al boton SI entoncs se elimina el registro
			alert.getButton(Dialog.BUTTON_POSITIVE).setOnClickListener(
					new View.OnClickListener() {

						@Override
						public void onClick(View v) {

							/** LO QUE SE DEBE HACER PARA ELIMINAR **/
							// Se obtiene el listResultPerfiles que es la lista
							// del resultado de la busqueda
							// con esta lista se puede ubicar el Objeto Perfil a
							// eliminar
							// position indica la posicion del elemento a borrar
							Integrante deleteIntegrante = fragmentPageTwo.listResultIntegrante
									.get(position);

							bdHelper.abrir();
							// se borra y se captura el mensaje de una vez en el
							// TOAST
							Toast.makeText(
									IntegranteActivity.this,
									bdHelper.eliminarIntegrante(deleteIntegrante),
									Toast.LENGTH_LONG).show();
							bdHelper.cerrar();

							// Tambien se Elimina el elemento de las listas de
							// la busqueda
							fragmentPageTwo.listItemsResult.remove(position);
							fragmentPageTwo.listResultIntegrante
									.remove(position);
							fragmentPageTwo.adapter.notifyDataSetChanged(); // Actualizar
																			// el
																			// ListView
							alert.dismiss();

						}
					});

			return true;
		default:
			return super.onContextItemSelected(item);
		}

	}

	/** Metodo controlador de acciones del menu general **/
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Intent intent;
		switch (item.getItemId()) {
		case R.id.action_close_session:
			intent = new Intent(this, LoginActivity.class);
			this.finish();
			this.startActivity(intent);
			break;
		case R.id.action_exit_app:
			this.finish();
			break;
		case R.id.action_to_home:
			intent = new Intent(this, HomeActivity.class);
			this.finish();
			this.startActivity(intent);
			break;
		default:
			break;
		}

		return super.onContextItemSelected(item);
	}

}
